package br.gerenciadorAudio.DB;

import java.util.ArrayList;
import java.util.List;

import br.gerenciadorAudio.Model.Profile;
import br.gerenciadorAudio.Model.ProfileSchedule;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class Repositorio {
	
	protected SQLiteDatabase db;
	private final String NOME_BANCO = "GP";
	private final int VERSAO_BANCO = 4;
	
	public Repositorio(Context context,String[] scriptCriarDB, String scriptApagarDB) {
		SqLiteHelper sh = new SqLiteHelper(context, NOME_BANCO, VERSAO_BANCO, scriptCriarDB, scriptApagarDB);
		sh.getWritableDatabase();
		
		if(db != null)
		{
			if(db.isOpen())
				db.close();
		}
	}
	
	public Repositorio(Context context) {
		// TODO Auto-generated constructor stub
		if(db != null)
		{
			if(db.isOpen())
				db.close();
		}
		
		db = context.openOrCreateDatabase(NOME_BANCO, Context.MODE_PRIVATE, null);
	}

	public long Insert(ContentValues values,String nomeTabela)
	{
		return db.insert(nomeTabela, null, values);
	}
	
	public long Update(String nomeTabela,ContentValues valores, String where, String[] whereArgs)
	{
		try
		{
			return db.update(nomeTabela, valores, where, whereArgs);
		}
		catch (Exception e) {
			// TODO: handle exception
			return 0;
		}
	}
	
	public long Delete(String nomeTabela,String where, String[] whereArgs)
	{
		return db.delete(nomeTabela, where, whereArgs);
	}
	
	public List<Profile> LoadProfile() throws Exception {
		
		try
		{
			Cursor c = db.query(Profile.Colunas.Tabela,null, null, null, null, null, null);
	
			List<Profile> perfis = new ArrayList<Profile>();
	
			if (c.moveToFirst()) {
	
				int idId = c.getColumnIndex(Profile.Colunas.Id);
				int idNome= c.getColumnIndex(Profile.Colunas.Nome);
				int idAlarme= c.getColumnIndex(Profile.Colunas.Alarme);
				int idMultimidia= c.getColumnIndex(Profile.Colunas.Multimidia);
				int idNotificacao= c.getColumnIndex(Profile.Colunas.Notificacao);
				int idRingtong= c.getColumnIndex(Profile.Colunas.Ringtong);
				int idSilencioso= c.getColumnIndex(Profile.Colunas.Silencioso);
				int idVibracall = c.getColumnIndex(Profile.Colunas.Vibracall);
				int idAtivo = c.getColumnIndex(Profile.Colunas.Ativo);
				int idDefault = c.getColumnIndex(Profile.Colunas.Default);
	
				do {
					Profile p = new Profile();
					
					p.Name = c.getString(idNome);
					p.Id = c.getInt(idId);
					p.Alarme = c.getInt(idAlarme);
					p.Multimedia = c.getInt(idMultimidia);
					p.Notification = c.getInt(idNotificacao);
					p.Ringtong = c.getInt(idRingtong);
					p.Silent = c.getInt(idSilencioso) == 1;
					p.Vibrate = c.getInt(idVibracall) == 1;
					p.Active = c.getInt(idAtivo) == 1;
					p.Default= c.getInt(idDefault) == 1;
					
					perfis.add(p);
	
				} while (c.moveToNext());
			}
			return perfis;
		}
		catch (Exception e) {
			// TODO: handle exception
			throw new Exception(e.getMessage());
		}
	}
		
	public Profile LoadProfile(int id) throws Exception {
			
			try
			{
				Cursor c = db.query(Profile.Colunas.Tabela,null, Profile.Colunas.Id + " = " + id, null, null, null, null);
				Profile p = new Profile();
				
				if (c.moveToFirst()) {
		
					int idId = c.getColumnIndex(Profile.Colunas.Id);
					int idNome= c.getColumnIndex(Profile.Colunas.Nome);
					int idAlarme= c.getColumnIndex(Profile.Colunas.Alarme);
					int idMultimidia= c.getColumnIndex(Profile.Colunas.Multimidia);
					int idNotificacao= c.getColumnIndex(Profile.Colunas.Notificacao);
					int idRingtong= c.getColumnIndex(Profile.Colunas.Ringtong);
					int idSilencioso= c.getColumnIndex(Profile.Colunas.Silencioso);
					int idVibracall= c.getColumnIndex(Profile.Colunas.Vibracall);
					int idAtivo = c.getColumnIndex(Profile.Colunas.Ativo);
					int idDefault = c.getColumnIndex(Profile.Colunas.Default);
					
					do {
											
						p.Name = c.getString(idNome);
						p.Id = c.getInt(idId);
						p.Alarme = c.getInt(idAlarme);
						p.Multimedia = c.getInt(idMultimidia);
						p.Notification = c.getInt(idNotificacao);
						p.Ringtong = c.getInt(idRingtong);
						p.Silent = c.getInt(idSilencioso) == 1;
						p.Vibrate = c.getInt(idVibracall) == 1;
						p.Active = c.getInt(idAtivo) == 1;
						p.Default= c.getInt(idDefault) == 1;
						
					} while (c.moveToNext());
				}
		
				return p;
			}
			catch (Exception e) {
				// TODO: handle exception
				throw new Exception(e.getMessage());
			}
		}

	public Cursor FindByOneCollumn(String table,String idColumn,String id) throws Exception {
		
		try
		{
			Cursor c = db.query(table,null, idColumn + " = '" + id + "'", null, null, null, null);
			return c;
		}
		catch (Exception e) {
			// TODO: handle exception
			throw new Exception(e.getMessage());
		}
	}
}
